#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <cassert>
#include <sstream>
#include <vector>
#include <map>
#include <assert.h>

using namespace std;

typedef struct path_{
        string from_cell;
        string to_cell;
        double slack;
        vector<string> instances;
        
        void operator=(const path_ p){
                from_cell = p.from_cell;
                to_cell = p.to_cell;
        };
        
        /* bool operator<(const point_ p2) const{ */
        /*         if(from_cell < p2.from_cell) */
        /*                 return true; */
        /*         else if(from_cell > p2.from_cell) */
        /*                 return false; */
        /*         else */
        /*                 return (to_cell < p2.to_cell); */
        /* }; */
        
        bool operator==(const path_ p) const{
                if(p.instances.size() != instances.size())
                        return false;
                else{
                        for(unsigned int i = 0; i < instances.size(); i++)
                                if(p.instances[i] != instances[i])
                                        return false;
                        return true;
                }
                //return(from_cell == p.from_cell && to_cell == p.to_cell);
        };
        
        bool operator!=(const path_ p) const{
                if(p.instances.size() != instances.size())
                        return true;
                else{
                        for(unsigned int i = 0; i < instances.size(); i++)
                                if(p.instances[i] != instances[i])
                                        return true;
                        return false;
                }
                //return(from_cell != p.from_cell || to_cell != p.to_cell);
        }

} path;
